#include "key.h"
#include "delay.h"
void KEY_Init(void)
{
    
    GPIO_InitTypeDef  GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
    GPIO_Init(GPIOA, &GPIO_InitStructure);    
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;      
    GPIO_Init(GPIOB, &GPIO_InitStructure);     
 
}
 

int Key_Scan(void)
{
	u8 temp=0;
	u8 key=0;
	u8 i,j;
	static u16 ss[4]={0x0034,0x0032,0x002c,0x001c};
	static u16 yy[4]={0x0e,0x0d,0x0b,0x07};
	
	GPIO_Write(GPIOA,GPIO_ReadInputData(GPIOA)&0xff00);
	temp=GPIO_ReadInputData(GPIOB)>>12;
	temp&=0x0f; 
	
	if(temp==0x0f)
	{
		return 0;
	}
	delay_ms(15);
	temp=GPIO_ReadInputData(GPIOB)>>12;
	temp&=0x0f; 
	for(i=0;i<4;i++)
	{	
		if(temp==yy[i]) break;
	}
	for(j=0;j<4;j++)
	{
		GPIO_Write(GPIOA,ss[j]);
		temp=GPIO_ReadInputData(GPIOB)>>12;
		temp&=0x0f;//
		if(temp!=0x0f) break;
	}
	delay_ms(15);
	key = j*4+i+1;

	if(key>4&&key<9)
	{
		key-=4;
		return key;
	}
		if(key<5)
	{
		key+=4;
		return key;
	}
	
		return key;
}



